题目描述
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: $[3,9,20,null,null,15,7]$,
1 | 3 |
返回其层次遍历结果:
1 | [ |
提示:
- $节点总数 <= 1000$
注意:本题与主站 102 题相同:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
算法
(BFS,层序遍历) $O(n)$
使用宽度优先搜索配合队列层序遍历二叉树
- 首先先将根节点入队列
- 如果队列不为空,进行以下循环
- 计算当前队列中的元素个数 sz,即当前层的元素个数
- 遍历当前层的每个元素,每次弹出队头元素,并将其对应的值加入到当前层序列中,如果当前节点有左孩子,则将左孩子入队列,如果当前节点有右孩子,则将右孩子入队列,代表下一层节点。
- 遍历完一层将当前层序列添加到答案中。
时间复杂度
二叉树的每个节点只会被遍历一次,所以时间复杂度为 $O(n)$。
空间复杂度
存储答案需要额外 $O(n^2)$ 的空间,队列需要额外 $O(n)$ 的空间。
C++ 代码
1 | /** |